The hardhat design in X10 is strict but it protects the user from
    error-prone initialization idioms,
    especially when combined with a rich type system and parallel code.
This paper showed the interaction between initialization and other language features,
    possible pitfalls in Java,
    and how they can be prevented in X10.
It also presented the rules of this design,
    the virtues of these rules,
    and possible design alternatives.
The rules were incorporated in the open-source X10 compiler,
    and are being used in production code.
